/* 业务处理超时，查看服务器的处理情况
    当服务器达到性能瓶颈，在一次业务处理中花费了大量的时间(超过了服务器设置的非活跃超时连接时间)
    1.在一次业务处理中耗费太长时间，导致其他连接也被连累超时，其他的连接有可能会被拖累超时释放
    假设现在有文件描述符12345，1文件描述符业务处理了30s，超时了，导致2345没有进行活跃度刷新
        1.如果2345是通信连接描述符，如果都就绪了则并不影响，因为接下来就会处理并刷新活跃度
        2.如果2是定时器描述符，定时器触发超时，执行定时任务，就会将345描述符给释放掉
          这时候一旦345描述符对应的连接被释放，接下来在处理345事件的时候就会导致程序崩溃
          因此这时候，在本次事件处理中，并不能直接对连接进行释放而应该将释放操作压入到任务池中，等到任务池进行处理的时候再去进行释放
*/
#include "../source/Server_version3.hpp"

int main()
{
    signal(SIGCHLD, SIG_IGN);
    for (int i = 0; i < 10; i++) {
        pid_t pid = fork();
        if (pid < 0) {
            DBG_LOG("FORK ERROR");
            return -1;
        }else if (pid == 0) {
            muduo::Socket cli_sock;
            cli_sock.CreateClient(8085, "127.0.0.1");
            std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
            while(1) {
                assert(cli_sock.Send(req.c_str(), req.size()) != -1);
                char buf[1024] = {0};
                assert(cli_sock.Recv(buf, 1023));
                DBG_LOG("[%s]", buf);
            }
            cli_sock.Close();
            exit(0);
        }
    }
    while(1) sleep(1);
    
    return 0;
}